/*=============================================================================

  SYSTEM DEFINITION
  
  FILE: SYS.cpp
  
  DESCRIPTION

    System definition

  Copyright (c) DaeSung Engineering Inc. All rights reserved.

=============================================================================*/
/*=============================================================================

  EDIT HISTORY

  ---------  -------  -------------------------------------------------------
    when          who       what, where, why
  ---------  -------  -------------------------------------------------------
    01/31/04   nso4th    Initial version
    
=============================================================================*/

/*=============================================================================
  HEADER INCLUSION
=============================================================================*/
#include <SYS_app.h>

/*=============================================================================
  CONSTANT  DEFINITION
=============================================================================*/
static char aKey[] = "177EF7DE-4DF80BBC468DEFCE650C055D25667056-177DA65E";

/*=============================================================================
  LOCALIZED FUNCTION DEFINITION
=============================================================================*/

/*=============================================================================
  LOCALIZED FUNCTION DEFINITION
=============================================================================*/
dword SYS_exceptionCB(dword evt, dword wp, dword lp, mcxt cxt);
dword MX_exceptionCB(dword evt, dword wp, dword lp, mcxt cxt);

/*=============================================================================
  EXTERNALIZED FUNCION DEFINITION
=============================================================================*/

boolean SYS_INIT(char *cmd)
{
	ObjClient_s		c;

	c.EventCbf = SYS_exceptionCB;
	c.pUserCxt = NULL;
	_sys_register_(&c);

	c.EventCbf = MX_exceptionCB;
	c.pUserCxt = NULL;
	_mx_register_(&c);

	AKEY_SET(aKey);
	SYSMEM_INIT();

#ifdef _ODEBUG_
	DBGINIT(NULL);
#endif

	UIprm_Init();
	
	return	SYS_CMD(cmd);
}

boolean SYS_CLOSE(void)
{
#ifdef CUST_APP_ONLY_ONE
	if(gExitAbnormal)
	{
		InterlockedDecrement(&gAppCounter);
	}
#endif

	UIprm_Close();
	DBGCLOSE();
	SYSMEM_CLOSE();

	return	TRUE;
}


boolean SYS_CMD(char *cmd)
{
	int			nLen;

	if(cmd == NULL)
	{
		return	FALSE;
	}
	nLen = strlen(cmd);

	// Default mode
	if(nLen == 0)
	{
		return	TRUE;
	}
	
	return	TRUE;
}

void SYS_DELAY(dword msec)
{
	int32                    j, cnt;
	dword                 res;

	if(msec <= 10)
	{
		Task_Delay(msec);
		Task_Switch();
		return;
	}
	if(RANGE_IN(msec, 10, 200))
	{
		cnt = msec/10;
		res = msec%10;

		for(j=0; j<cnt; j++)
		{
			Task_Delay(10);
			Task_Switch();
		}
		if(res>0)
		{
			Task_Delay(res);
			Task_Switch();
		}
		return;
	}
	cnt = msec/100;
	res = msec%100;

	for(j=0; j<cnt; j++)
	{
		Task_Delay(100);
		Task_Switch();
	}
	if(res > 0)
	{
		Task_Delay(res);
		Task_Switch();
	}
}

/*=============================================================================
  LOCALIZED FUNCTION IMPLEMENTATION
=============================================================================*/
dword SYS_exceptionCB(dword evt, dword wp, dword lp, mcxt cxt)
{
	switch(evt)
	{
	case OBASE_SYS_ERR:
	{
		LOGERR("[SYS.ERR] %s", (char*)wp);
		break;
	}
	case OBASE_SYS_WARN:
	{
		LOGWARN("%s", (char*)wp);
		break;
	}
	}

	return	(1);
}

dword MX_exceptionCB(dword evt, dword wp, dword lp, mcxt cxt)
{
	switch(evt)
	{
	case MX_SYS_ERR:
	{
		char		*str;

		str = (char*)wp;
		if(str != NULL)
		{
			if(strncmp(str,"[ALog", 4) == 0)
			{
				Dbg_Print("[MX.ERR] %s\n", str);
			}
			else
			{
				LOGERR("[MX.ERR] %s", str);
			}
		}
		break;
	}
	case MX_SYS_WARN:
	{
		LOGWARN("[MX.WARN] %s", (char*)wp);
		break;
	}
	}

	return	(1);
}

/*--- END OF SYS.cpp ---*/
